package com.zt.questionnaire.common.utils;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.SingletonBeanRegistry;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * 获取spring容器，以访问容器中定义的其他bean
 */
public class SpringContext implements ApplicationContextAware {

    // Spring应用上下文环境
    private ApplicationContext applicationContext;


    /**
     * 实现ApplicationContextAware接口的回调方法，设置上下文环境
     *
     * @param applicationContext
     */
    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }


    /**
     * 获取对象
     * 这里重写了bean方法，起主要作用
     *
     * @param name
     * @return Object 一个以所给名字注册的bean的实例
     * @throws BeansException
     */
    public Object getBean(String name) {
        return applicationContext.getBean(name);
    }

    public <T> T getBean(Class<T> cls) {

        return applicationContext.getBean(cls);
    }


    public <T> void registerBean(String beanName, T bean) {
        SingletonBeanRegistry beanRegistry = (SingletonBeanRegistry) applicationContext.getAutowireCapableBeanFactory();
        beanRegistry.registerSingleton(beanName, bean);
    }


}
